WebAssembly(Wasm)์ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC) ํตํฉ, ๊ด๋ฆฌํ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฐธ์กฐ ์นด์ดํ ์ ์ด์ , ์ ์ธ๊ณ์ ์ผ๋ก ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ์์ ํ๋ฉฐ ์ด์ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ๋ํ ์๋ฏธ ํ์
WebAssembly GC ํตํฉ: ๊ธ๋ก๋ฒ ๋ฐํ์์ ์ํ ๊ด๋ฆฌํ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฐธ์กฐ ์นด์ดํ
WebAssembly(Wasm)๋ ์น ๋ธ๋ผ์ฐ์ ๋ฐ ๊ทธ ์ด์์์ ๊ฑฐ์ ๋ค์ดํฐ๋ธ ์๋๋ก ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ํ์ ์ ์ธ ๊ธฐ์ ๋ก ๋ถ์ํ์ต๋๋ค. ์ด๊ธฐ ์ค๊ณ๋ ์ ์์ค ์ ์ด์ ์์ธก ๊ฐ๋ฅํ ์ฑ๋ฅ์ ์ค์ ์ ๋์์ง๋ง, ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ ํตํฉ์ ์ค์ํ ๋ฐ์ ์ ์๋ฏธํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ ๊ด๋ฒ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ Wasm์ ํ๊ฒํ ํ ์ ์๋ ์ ์ฌ๋ ฅ์ ์ด์ด์ฃผ์ด, ๊ธ๋ก๋ฒ ํ๊ฒฝ์์ ์ ๊ตํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๋ฒ์๋ฅผ ํ์ฅํฉ๋๋ค. ์ด ๊ฒ์๋ฌผ์ WebAssembly GC ๋ด์ ๊ด๋ฆฌํ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฐธ์กฐ ์นด์ดํ ์ ํต์ฌ ๊ฐ๋ ์ ํ๊ตฌํ๋ฉฐ, ๊ธฐ์ ์ ๊ธฐ๋ฐ๊ณผ ํฌ๋ก์ค ํ๋ซํผ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ฏธ๋์ ๋ํ ์ํฅ์ ์ดํด๋ด ๋๋ค.
WebAssembly์์ ๊ด๋ฆฌํ ๋ฉ๋ชจ๋ฆฌ์ ํ์์ฑ
์ญ์ฌ์ ์ผ๋ก WebAssembly๋ ์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์์ ์๋ํ์ต๋๋ค. ๊ฐ๋ฐ์ ๋๋ Wasm์ ํ๊ฒํ ํ๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ฑ ์์ก์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฒ์ ์์ง์ด๋ ๊ณผํ ์๋ฎฌ๋ ์ด์ ๊ณผ ๊ฐ์ด ์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ์ธ ์ธ๋ฐํ ์ ์ด์ ์์ธก ๊ฐ๋ฅํ ์ฑ๋ฅ์ ์ ๊ณตํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ ๋์, ๋๊ธ๋ง ํฌ์ธํฐ, ๋ฒํผ ์ค๋ฒํ๋ก์ ๊ฐ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ด๋ จ๋ ๊ณ ์ ํ ์ํ๋ ๋์ ํ์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ถ์์ ์ฑ, ๋ณด์ ์ทจ์ฝ์ฑ ๋ฐ ๋ ๋ณต์กํ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
WebAssembly์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์ด๊ธฐ ๋ฒ์๋ฅผ ๋์ด ํ์ฅ๋จ์ ๋ฐ๋ผ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์์กดํ๋ ์ธ์ด๋ฅผ ์ง์ํด์ผ ํ๋ค๋ ์๊ตฌ๊ฐ ์ฆ๊ฐํ์ต๋๋ค. Java, Python, C#, JavaScript์ ๊ฐ์ด ๋ด์ฅ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ๊ฐ์ถ ์ธ์ด๋ค์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ด ๋จ์ด์ง๋ Wasm ํ๊ฒฝ์ผ๋ก ํจ์จ์ ์ด๊ณ ์์ ํ๊ฒ ์ปดํ์ผํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์์ต๋๋ค. WebAssembly ์ฌ์์ GC๋ฅผ ํตํฉํ๋ ๊ฒ์ ์ด๋ฌํ ๊ทผ๋ณธ์ ์ธ ํ๊ณ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
WebAssembly GC ์ดํด
WebAssembly GC ์ ์์ ๊ฐ์ ์ ์ผ๋ก ์ฐธ์กฐ๋ ์ ์๋ ๊ฐ์ ๊ด๋ฆฌ๋ฅผ ํ์ฉํ๋ ์๋ก์ด ๋ช ๋ น์ด ์ธํธ์ ๊ตฌ์กฐํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ ๋์ ํฉ๋๋ค. ์ด๋ Wasm์ด ์ด์ ํ ํ ๋น ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ํด์ ๋ฅผ ์๊ตฌํ๋ ์ธ์ด๋ฅผ ํธ์คํ ํ ์ ์์์ ์๋ฏธํฉ๋๋ค. GC ์ ์์ ๋จ์ผ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ท์ ํ๋ ๊ฒ์ด ์๋๋ผ, ์ฐธ์กฐ ์นด์ดํ ๋ฐ ํธ๋ ์ด์ฑ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฒ์ ํฌํจํ์ฌ ๋ค์ํ GC ๊ตฌํ์ ์ง์ํ ์ ์๋ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํต์ฌ์ ์ผ๋ก Wasm GC๋ ํ์ ๋ฐฐ์น๋ ์ ์๋ ํ์ ์ ์ ์ํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ฌํ ํ์ ์ ํ๋๋ฅผ ๊ฐ์ง ๊ตฌ์กฐ์ฒด์ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ, ๋ฐฐ์ด๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ๊ธฐํ ๋ณต์กํ ๋ฐ์ดํฐ ํ์ ์ ํฌํจํ ์ ์์ต๋๋ค. ์ค์ํ ๊ฒ์ ์ด๋ฌํ ํ์ ์ด ๋ค๋ฅธ ๊ฐ์ ๋ํ ์ฐธ์กฐ๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ, ์ด๋ GC๊ฐ ํ์ํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๊ฐ์ฒด ๊ทธ๋ํ์ ๊ธฐ๋ฐ์ ํ์ฑํ๋ค๋ ๊ฒ์ ๋๋ค.
Wasm GC์ ํต์ฌ ๊ฐ๋ :
- ๊ด๋ฆฌํ ํ์ : GC์ ์ํด ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๊ธฐ ์ํ ์๋ก์ด ํ์ ์ด ๋์ ๋์์ต๋๋ค. ์ด๋ฌํ ํ์ ์ ๊ธฐ์กด์ ๊ธฐ๋ณธ ํ์ (์ ์ ๋ฐ ๋ถ๋ ์์์ ๊ณผ ๊ฐ์)๊ณผ ๊ตฌ๋ณ๋ฉ๋๋ค.
- ์ฐธ์กฐ ํ์ : ๊ด๋ฆฌํ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ(ํฌ์ธํฐ)๋ฅผ ๋ค๋ฅธ ๊ด๋ฆฌํ ๊ฐ์ฒด ๋ด์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- ํ ํ ๋น: GC ๊ด๋ฆฌ ๊ฐ์ฒด๊ฐ ์์ฃผํ๋ ๊ด๋ฆฌํ ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ธฐ ์ํ ๋ช ๋ น์ด์ ๋๋ค.
- GC ์์ : ๊ฐ์ฒด ์์ฑ, ํ๋ ์ฝ๊ธฐ/์ฐ๊ธฐ, ๊ฐ์ฒด ์ฌ์ฉ์ ๋ํ GC ์ ํธ ์ ๋ฌ๊ณผ ๊ฐ์ด GC์ ์ํธ ์์ฉํ๊ธฐ ์ํ ๋ช ๋ น์ด์ ๋๋ค.
์ฐธ์กฐ ์นด์ดํ : Wasm์ ์ํ ์ ๋ช ํ GC ์ ๋ต
Wasm GC ์ฌ์์ ์ ์ฐํ์ง๋ง, ์ฐธ์กฐ ์นด์ดํ ์ ํตํฉ์ ํนํ ์ ํฉํ๊ณ ์์ฃผ ๋ ผ์๋๋ ์ ๋ต์ผ๋ก ๋ถ์ํ์ต๋๋ค. ์ฐธ์กฐ ์นด์ดํ ์ ๊ฐ ๊ฐ์ฒด์ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ์๋ฅผ ๋ํ๋ด๋ ์นด์ดํฐ๊ฐ ์ฐ๊ฒฐ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ์ ๋๋ค. ์ด ์นด์ดํฐ๊ฐ 0์ผ๋ก ๋จ์ด์ง๋ฉด ๊ฐ์ฒด๊ฐ ๋ ์ด์ ๋๋ฌํ ์ ์์ผ๋ฉฐ ์์ ํ๊ฒ ํด์ ๋ ์ ์์์ ๋ํ๋ ๋๋ค.
์ฐธ์กฐ ์นด์ดํ ์๋ ๋ฐฉ์:
- ์ด๊ธฐํ: ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์ฐธ์กฐ ์นด์ดํฐ๋ 1๋ก ์ด๊ธฐํ๋ฉ๋๋ค(์ด๊ธฐ ์ฐธ์กฐ๋ฅผ ๋ํ๋).
- ์ฆ๊ฐ: ๊ฐ์ฒด์ ๋ํ ์๋ก์ด ์ฐธ์กฐ๊ฐ ์์ฑ๋ ๋(์: ๊ฐ์ฒด๋ฅผ ์ ๋ณ์์ ํ ๋น, ์ธ์๋ก ์ ๋ฌ), ํด๋น ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํฐ๊ฐ ์ฆ๊ฐํฉ๋๋ค.
- ๊ฐ์: ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ํ๊ดด๋๊ฑฐ๋ ๋ ์ด์ ์ ํจํ์ง ์์ ๋(์: ๋ณ์๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋จ, ํ ๋น์ด ์ฐธ์กฐ๋ฅผ ๋ฎ์ด์), ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํฐ๊ฐ ๊ฐ์ํฉ๋๋ค.
- ํด์ : ๊ฐ์ ํ ์ฐธ์กฐ ์นด์ดํฐ๊ฐ 0์ ๋๋ฌํ๋ฉด ํด๋น ๊ฐ์ฒด๊ฐ ์ฆ์ ํด์ ๋๊ณ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์๋ฉ๋๋ค. ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ, ์ฐธ์กฐ๋ ๊ฐ์ฒด์ ์นด์ดํฐ๋ ๊ฐ์ํ์ฌ ์ ์ฌ์ ์ผ๋ก ํด์ ์บ์ค์ผ์ด๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค.
Wasm์ ๋ํ ์ฐธ์กฐ ์นด์ดํ ์ ์ฅ์ :
- ์์ธก ๊ฐ๋ฅํ ํด์ : ์ฃผ๊ธฐ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์์ธก ๋ถ๊ฐ๋ฅํ๊ฒ ์คํ๋ ์ ์๋ ํธ๋ ์ด์ฑ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋ฌ๋ฆฌ, ์ฐธ์กฐ ์นด์ดํ ์ ๋๋ฌํ ์ ์๊ฒ ๋ ์ฆ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค. ์ด๋ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ์ง์ฐ ์๊ฐ์ด ์ค์ํ ์์คํ ์ ๊ฐ์น ์๋ ๋ณด๋ค ๊ฒฐ์ ๋ก ์ ์ธ ์ฑ๋ฅ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ๊ตฌํ ๋จ์์ฑ (์ผ๋ถ ๋งฅ๋ฝ์์): ํน์ ์ธ์ด ๋ฐํ์์ ๊ฒฝ์ฐ, ์ฐธ์กฐ ์นด์ดํ ์ ๊ตฌํํ๋ ๊ฒ์ด ๋ณต์กํ ํธ๋ ์ด์ฑ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๋ ๊ฐ๋จํ ์ ์์ต๋๋ค. ํนํ ์ด๋ฏธ ์ด๋ค ํํ์ ์ฐธ์กฐ ์นด์ดํ ์ ์ฌ์ฉํ๋ ๊ธฐ์กด ์ธ์ด ๊ตฌํ์ ๋ค๋ฃฐ ๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
- "Stop-the-World" ์ค๋จ ์์: ์ฐธ์กฐ ์นด์ดํ ์ ์ผ๋ฐ์ ์ผ๋ก ํด์ ๊ฐ ๋ ์ ์ง์ ์ด๊ธฐ ๋๋ฌธ์ ์ผ๋ถ ํธ๋ ์ด์ฑ GC ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ด๋ จ๋ ๊ธด "Stop-the-World" ์ค๋จ์ ํผํฉ๋๋ค.
์ฐธ์กฐ ์นด์ดํ ์ ๊ณผ์ :
- ์ํ ์ฐธ์กฐ: ๋จ์ ์ฐธ์กฐ ์นด์ดํ ์ ์ฃผ์ ๋จ์ ์ ์ํ ์ฐธ์กฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฒด A๊ฐ ๊ฐ์ฒด B๋ฅผ ์ฐธ์กฐํ๊ณ ๊ฐ์ฒด B๊ฐ ๊ฐ์ฒด A๋ฅผ ๋ค์ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ, ๋ ๊ฐ์ฒด์ ๋ํ ์ธ๋ถ ์ฐธ์กฐ๊ฐ ์๋๋ผ๋ ์ฐธ์กฐ ์นด์ดํฐ๊ฐ 0์ ๋๋ฌํ์ง ์์ ์ ์์ต๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ก ์ด์ด์ง๋๋ค.
- ์ค๋ฒํค๋: ์ฐธ์กฐ ์นด์ดํฐ๋ฅผ ์ฆ๊ฐ ๋ฐ ๊ฐ์์ํค๋ ๊ฒ์ ํนํ ๋ง์ ์๋ช ์ ์งง์ ์ฐธ์กฐ๊ฐ ์๋ ์๋๋ฆฌ์ค์์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ๋ชจ๋ ํ ๋น ๋๋ ํฌ์ธํฐ ์กฐ์์ ์์์ ์ฆ๊ฐ/๊ฐ์ ์ฐ์ฐ์ด ํ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค.
- ๋์์ฑ ๋ฌธ์ : ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ฐธ์กฐ ์นด์ดํฐ ์ ๋ฐ์ดํธ๋ ๊ฒฝ์ ์กฐ๊ฑด์ ๋ฐฉ์งํ๊ธฐ ์ํด ์์์ ์ด์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ์์์ ์ฐ์ฐ์ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ์ด๋ ๋น์์์ ์ฐ์ฐ๋ณด๋ค ๋๋ฆด ์ ์์ต๋๋ค.
์ํ ์ฐธ์กฐ ๋ฌธ์ ๋ฅผ ์ํํ๊ธฐ ์ํด ์ข ์ข ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ฌ์ดํด์ ์ ๋ฆฌํ๊ธฐ ์ํ ์ฃผ๊ธฐ์ ์ธ ํธ๋ ์ด์ฑ GC ๋๋ ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํฐ์ ๊ธฐ์ฌํ์ง ์๊ณ ์ฌ์ดํด์ ๋๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๋ ์ฝํ ์ฐธ์กฐ์ ๊ฐ์ ๊ธฐ์ ์ด ํฌํจ๋ ์ ์์ต๋๋ค. WebAssembly GC ์ ์์ ์ด๋ฌํ ํ์ด๋ธ๋ฆฌ๋ ์ ๋ต์ ์์ฉํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์๋ ์ค์ธ ๊ด๋ฆฌํ ๋ฉ๋ชจ๋ฆฌ: ์ธ์ด ํด์ฒด์ธ ๋ฐ Wasm
ํนํ ์ฐธ์กฐ ์นด์ดํ ๋ฐ ๊ธฐํ ๊ด๋ฆฌํ ๋ฉ๋ชจ๋ฆฌ ํจ๋ฌ๋ค์์ ์ง์ํ๋ Wasm GC์ ํตํฉ์ ์ธ๊ธฐ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ WebAssembly๋ฅผ ํ๊ฒํ ํ๋ ๋ฐฉ์์ ์ฌ์คํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด์ ์ Wasm์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ ์ฝ์ ๋ฐ์๋ ์ธ์ด ํด์ฒด์ธ์ ์ด์ Wasm GC๋ฅผ ํ์ฉํ์ฌ ๋ณด๋ค ๊ด์ฉ์ ์ด๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ธ์ด ์ง์ ์์:
- Java/JVM ์ธ์ด (Scala, Kotlin): Java Virtual Machine(JVM)์์ ์คํ๋๋ ์ธ์ด๋ ์ ๊ตํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. Wasm GC๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฒด JVM ๋ฐํ์๊ณผ Java ์ ํ๋ฆฌ์ผ์ด์ ์ WebAssembly๋ก ํฌํ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ฉฐ, ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์๋ฎฌ๋ ์ด์ ์ ์ฌ์ฉํ ์ด์ ์๋์ ๋นํด ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. CheerpJ์ ๊ฐ์ ๋๊ตฌ ๋ฐ JWebAssembly ์ปค๋ฎค๋ํฐ ๋ด์ ์ง์์ ์ธ ๋ ธ๋ ฅ์ ์ด๋ฌํ ๊ฒฝ๋ก๋ฅผ ํ์ํ๊ณ ์์ต๋๋ค.
- C#/.NET: ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋ ฅํ ๊ด๋ฆฌํ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์ ํน์ง์ผ๋ก ํ๋ .NET ๋ฐํ์๋ Wasm GC๋ก๋ถํฐ ํฐ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค. ํ๋ก์ ํธ๋ .NET ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ Mono ๋ฐํ์์ WebAssembly๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ฉฐ, ๋ ๋ง์ .NET ๊ฐ๋ฐ์๊ฐ ์น ๋๋ ๋ค๋ฅธ Wasm ํ๊ฒฝ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ์ ์๋๋ก ํฉ๋๋ค.
- Python/Ruby/PHP: ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ Wasm GC์ ์ฃผ์ ํ๋ณด์ ๋๋ค. ์ด๋ฌํ ์ธ์ด๋ฅผ Wasm์ผ๋ก ํฌํ ํ๋ฉด ์คํฌ๋ฆฝํธ ์คํ ์๋๋ฅผ ๋์ด๊ณ JavaScript ์คํ์ด ๋ถ์ถฉ๋ถํ๊ฑฐ๋ ๋ฐ๋์งํ์ง ์์ ์ํฉ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Python(Emscripten์ ํ์ฉํ๋ Pyodide์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํจ, Wasm GC ๊ธฐ๋ฅ์ ํตํฉํ๋๋ก ๋ฐ์ ์ค) ๋ฐ ๊ธฐํ ๋์ ์ธ์ด๋ฅผ ์คํํ๋ ค๋ ๋ ธ๋ ฅ์ ์ด๋ฌํ ๊ธฐ๋ฅ์ผ๋ก ๊ฐํ๋ฉ๋๋ค.
- Rust: Rust์ ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ์์ ๊ถ ๋ฐ ๋น๋ฆผ ์์คํ
(์ปดํ์ผ ์๊ฐ ๊ฒ์ฌ)์ ํตํด ๋ฌ์ฑ๋์ง๋ง, ์ ํ์ GC๋ ์ ๊ณตํฉ๋๋ค. GC ๊ด๋ฆฌ ์ธ์ด์ ํตํฉํ๊ฑฐ๋ ๋์ ํ์ดํ์ ํ์ฉํ๋ ๊ฒ์ด ์ ๋ฆฌํ ์๋๋ฆฌ์ค์ ๊ฒฝ์ฐ, Rust๊ฐ Wasm GC์ ์ธํฐํ์ด์คํ๊ฑฐ๋ ์ฑํํ ์ ์๋ ๊ธฐ๋ฅ์ ํ์ํ ์ ์์ต๋๋ค. ํต์ฌ Wasm GC ์ ์์ ์ข
์ข
Rust์ `Rc
`(์ฐธ์กฐ ์นด์ดํธ ํฌ์ธํฐ) ๋ฐ `Arc `(์์ ์ฐธ์กฐ ์นด์ดํธ ํฌ์ธํฐ)์ ๊ฐ๋ ์ ์ผ๋ก ์ ์ฌํ ์ฐธ์กฐ ํ์ ์ ์ฌ์ฉํ์ฌ ์ํธ ์ด์ฉ์ฑ์ ์ด์งํฉ๋๋ค.
๊ธฐ๋ณธ GC ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ธ์ด๋ฅผ WebAssembly๋ก ์ปดํ์ผํ๋ ๊ธฐ๋ฅ์ Wasm์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ GC๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ด์ ์ ๊ทผ ๋ฐฉ์์ ๋ณต์ก์ฑ๊ณผ ์ค๋ฒํค๋๋ฅผ ํฌ๊ฒ ์ค์ ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ก ์ด์ด์ง๋๋ค.
- ํฅ์๋ ์ฑ๋ฅ: ๊ธฐ๋ณธ GC ๊ตฌํ์ ์ผ๋ฐ์ ์ผ๋ก ํด๋น ์ธ์ด์ ๋ํด ๊ณ ๋๋ก ์ต์ ํ๋์ด ์์ด ์๋ฎฌ๋ ์ด์ ๋ ์๋ฃจ์ ๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ด์ง ํฌ๊ธฐ ๊ฐ์: Wasm ๋ชจ๋ ๋ด์์ ๋ณ๋์ GC ๊ตฌํ์ด ํ์ ์์ผ๋ฉด ์ด์ง ํฌ๊ธฐ๊ฐ ๋ ์์์ง ์ ์์ต๋๋ค.
- ํฅ์๋ ์ํธ ์ด์ฉ์ฑ: Wasm์ผ๋ก ์ปดํ์ผ๋ ๋ค์ํ ์ธ์ด ๊ฐ์ ์ํํ ์ํธ ์์ฉ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ๊ณตํต๋ ์ดํด๋ฅผ ๊ณต์ ํ ๋ ๋ ๋ฌ์ฑ ๊ฐ๋ฅํด์ง๋๋ค.
๊ธ๋ก๋ฒ ์ํฅ ๋ฐ ํฅํ ์ ๋ง
GC๋ฅผ WebAssembly์ ํตํฉํ๋ ๊ฒ์ ๋จ์ํ ๊ธฐ์ ํฅ์์ด ์๋๋ผ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ์ ๋ํ ๊ด๋ฒ์ํ ๊ธ๋ก๋ฒ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
1. ์น ๋ฐ ๊ทธ ์ด์์์ ๊ณ ์์ค ์ธ์ด์ ๋ฏผ์ฃผํ:
์ ์ธ๊ณ ๊ฐ๋ฐ์, ํนํ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ณ ์์ค ์ธ์ด์ ์ต์ํ ๊ฐ๋ฐ์๋ค์๊ฒ Wasm GC๋ WebAssembly ๊ฐ๋ฐ์ ์ง์ ์ฅ๋ฒฝ์ ๋ฎ์ถฅ๋๋ค. ์ด์ ๊ธฐ์กด ์ธ์ด ์ ๋ฌธ์ฑ๊ณผ ์ํ๊ณ๋ฅผ ํ์ฉํ์ฌ ์ ํฅ ์์ฅ์ ์ ์ ๋ ฅ ์ฅ์น์ ์๋ ์น ๋ธ๋ผ์ฐ์ ๋ถํฐ ์ ๊ตํ ์๋ฒ ์ธก Wasm ๋ฐํ์๊น์ง ๋ค์ํ ํ๊ฒฝ์์ ์คํ๋ ์ ์๋ ๊ฐ๋ ฅํ๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
2. ํฌ๋ก์ค ํ๋ซํผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ง์:
WebAssembly๊ฐ ์ฑ์ํจ์ ๋ฐ๋ผ ์๋ฒ ์ธก ์ ํ๋ฆฌ์ผ์ด์ , ์ฃ์ง ์ปดํจํ ๋ฐ ์๋ฒ ๋๋ ์์คํ ์ ๋ํ ๋ณดํธ์ ์ธ ์ปดํ์ผ ๋์์ผ๋ก์ ์ ์ ๋ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. Wasm GC๋ ๊ด๋ฆฌํ ์ธ์ด๋ก ๋จ์ผ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์์ฑํ ์ ์๊ฒ ํ์ฌ, ์๋นํ ์์ ์์ด ๋ค์ํ ํ๋ซํผ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ ํจ์จ์ฑ๊ณผ ๋ค์ํ ์ด์ ๋งฅ๋ฝ์ ๊ฑธ์ณ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ํด ๋ ธ๋ ฅํ๋ ๊ธ๋ก๋ฒ ๊ธฐ์ ์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค.
3. ๋ณด๋ค ํ๋ถํ ์น ์ํ๊ณ ์กฐ์ฑ:
Python, Java ๋๋ C#๊ณผ ๊ฐ์ ์ธ์ด๋ก ์์ฑ๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ธ๋ผ์ฐ์ ๋ด์์ ์คํํ ์ ์๋ ๊ธฐ๋ฅ์ ์น ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค. ์ฌ์ฉ์ ์ด์ ์ฒด์ ๋ ์ฅ์น ํ๋์จ์ด์ ๊ด๊ณ์์ด ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์คํ๋๋ ๋ณต์กํ ๋ฐ์ดํฐ ๋ถ์ ๋๊ตฌ, ๊ธฐ๋ฅ์ด ํ๋ถํ IDE ๋๋ ๋ณต์กํ ๊ณผํ ์๊ฐํ ํ๋ซํผ์ ์์ํด ๋ณด์ญ์์ค. ์ด ๋ชจ๋ ๊ฒ์ด Wasm GC๋ก ๊ตฌ๋๋ฉ๋๋ค.
4. ๋ณด์ ๋ฐ ์์ ์ฑ ํฅ์:
๊ด๋ฆฌํ ๋ฉ๋ชจ๋ฆฌ๋ ๋ณธ์ง์ ์ผ๋ก ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก ์ด์ด์ง ์ ์๋ ์ผ๋ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฒ๊ทธ์ ์ํ์ ํฌ๊ฒ ์ค์ ๋๋ค. ๋ ๊ด๋ฒ์ํ ์ธ์ด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ์ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํจ์ผ๋ก์จ Wasm GC๋ ์ ์ธ๊ณ์ ์ผ๋ก ๋ ์์ ํ๊ณ ์์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ๊ธฐ์ฌํฉ๋๋ค.
5. Wasm์์ ์ฐธ์กฐ ์นด์ดํ ์ ๋ฐ์ :
WebAssembly ์ฌ์์ ์ด์์๋ ํ์ค์ด๋ฉฐ, ์ง์์ ์ธ ๋ ผ์๋ GC ์ง์์ ๊ฐ์ ํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ํฅํ ๊ฐ๋ฐ์๋ ์ฌ์ดํด ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ณด๋ค ์ ๊ตํ ๋ฉ์ปค๋์ฆ, ์ฑ๋ฅ์ ์ํ ์ฐธ์กฐ ์นด์ดํ ์์ ์ต์ ํ, ๋ค๋ฅธ GC ์ ๋ต์ ์ฌ์ฉํ๊ฑฐ๋ GC๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๋ Wasm ๋ชจ๋ ๊ฐ์ ์ํํ ์ํธ ์ด์ฉ์ฑ ๋ณด์ฅ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ๊ฒฐ์ ๋ก ์ ์์ฑ์ ๊ฐ์ง ์ฐธ์กฐ ์นด์ดํ ์ ์ค์ ์ ๋ ์ผ๋ก์จ Wasm์ ์ ์ธ๊ณ์ ์ผ๋ก ๋ค์ํ ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ์๋ฒ ๋๋ ๋ฐ ์๋ฒ ์ธก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๊ฐ๋ ฅํ ๊ฒฝ์์๋ก ์๋ฆฌ๋งค๊นํ๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก
์ฐธ์กฐ ์นด์ดํ ์ ํต์ฌ ์ง์ ๋ฉ์ปค๋์ฆ์ผ๋ก ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํฉ์ WebAssembly์ ์ค์ถ์ ์ธ ๋ฐ์ ์ ๋ํ๋ ๋๋ค. ์ด๋ ์ ์ธ๊ณ ๊ฐ๋ฐ์์๊ฒ Wasm ์ํ๊ณ์ ๋ํ ์ก์ธ์ค๋ฅผ ๋ฏผ์ฃผํํ์ฌ ๋ ๋์ ๋ฒ์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ํจ์จ์ ์ด๊ณ ์์ ํ๊ฒ ์ปดํ์ผํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฌํ ๋ฐ์ ์ ์น, ํด๋ผ์ฐ๋ ๋ฐ ์ฃ์ง์์ ์คํ๋ ๋ ๋ณต์กํ๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ธธ์ ์ด์ด์ค๋๋ค. Wasm GC ํ์ค์ด ์ฑ์ํ๊ณ ์ธ์ด ํด์ฒด์ธ์ด ๊ณ์ ์ฑํํจ์ ๋ฐ๋ผ, ์ฐ๋ฆฌ๋ ์ด ๋ณดํธ์ ์ธ ๋ฐํ์ ๊ธฐ์ ์ ์ ์ฒด ์ ์ฌ๋ ฅ์ ํ์ฉํ๋ ํ์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธ์ฆ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ์ฐธ์กฐ ์นด์ดํ ๊ณผ ๊ฐ์ ๋ฉ์ปค๋์ฆ์ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ๊ณผ์ ์ด๊ณ ์์ ํ๊ฒ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ฐจ์ธ๋ ๊ธ๋ก๋ฒ ์ํํธ์จ์ด ๊ตฌ์ถ์ ๊ธฐ๋ณธ์ด๋ฉฐ, WebAssembly๋ ์ด์ ์ด๋ฌํ ๊ณผ์ ๋ฅผ ์ถฉ์กฑํ ์ค๋น๊ฐ ๋์ด ์์ต๋๋ค.